home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / tds / convsrc / tex2msg.c < prev    next >
C/C++ Source or Header  |  1995-11-01  |  2KB  |  95 lines

  1. /* TeX2Msg.c */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <ctype.h>
  7.  
  8. static char version[] = "$VER: TeX2Msg 1.00 (28.01.94)";
  9.  
  10. #define WARNING_NUMBER 5
  11. char *WarningsArray[WARNING_NUMBER] =
  12. {"Overfull", "Tight", "Loose", "Underfull", "LaTeX Warning:"};
  13.  
  14. void 
  15. PrintMessageToTED(char *filename, int line, char *type, char *message)
  16. {
  17.   printf("<%s> %d %s <%s>\n", filename, line, type, message);
  18. }
  19.  
  20. /* il messaggio puo' essere globale: risparmio stack. Tanto sono
  21.    sicuro che viene impiegato all'interno dello stesso ramo      */
  22.  
  23. char message[90];
  24.  
  25. void 
  26. ReadMessage(void)
  27. {
  28.   char filename[80];
  29.   char buffer[90];        /* per TeX basterebbero 80 caratteri */
  30.   int c, i;
  31.  
  32.   /* per prima cosa costruisci il nome del file */
  33.  
  34.   for (i = 0, c = 0; (!isspace(c)) && (i < 79) && (c != ')'); c = filename[i++] = getchar());
  35.   filename[--i] = 0;
  36.   ungetc(c, stdin);
  37.  
  38.   i = 0;
  39.   buffer[0] = 0;
  40.  
  41.   while ((c = getchar()) != EOF) {
  42.     if (c == '(')        /* nuovo file, nuovo livello di ricorsione */
  43.       ReadMessage();
  44.     else if (c == ')') {
  45.       return;            /* fine ricorsione */
  46.     }
  47.     else if (c == '\n') {
  48.       buffer[i] = 0;
  49.       i = 0;
  50.       if (buffer[0] == '!') {
  51.         /* errore */
  52.         char *pos;
  53.  
  54.         strcpy(message, &buffer[2]);
  55.  
  56.         while (gets(buffer))
  57.           if ((pos = strstr(buffer, "l.")) != 0)
  58.             break;
  59.         PrintMessageToTED(filename, atoi(pos + 2), "E", message);
  60.       }
  61.       /* Warning del TeX */
  62.       else {
  63.         int j;
  64.         char *pos;
  65.  
  66.         for (j = 0; j < WARNING_NUMBER; j++)
  67.           if (!strncmp(buffer, WarningsArray[j], strlen(WarningsArray[j]))) {
  68.             pos = strstr(buffer, " at lines ");
  69.             pos[0] = 0;
  70.             pos += strlen(" at lines ");
  71.             PrintMessageToTED(filename, atoi(pos), "W", buffer);
  72.           }
  73.       }
  74.     }
  75.     else
  76.       buffer[i++] = c;
  77.   }
  78. }
  79.  
  80. int
  81. main(int argc, char **argv)
  82. {
  83.   int c;
  84.  
  85.   while ((c = getchar()) != EOF) {
  86.     if (c == '\n')        /* nuovo file, nuovo livello di ricorsione */
  87.       if ((c = getchar()) == '(') {
  88.         ReadMessage();
  89.         break;
  90.       }
  91.   }
  92.   return(0);
  93. }
  94.  
  95.